/*
权限校验,
Vue Router中的前置钩子函数 deforeEach(to,from,next)
当进行路由跳转之前,进行判断,是否登录过

to: 要进入的目标路由对象
from: 要离开的路由对象
next: 是一个方法,可以指定路由地址,进行路由跳转

*/

import router from '@/router'
import { getUserInfo } from '@/api/login'
import store from './store'

router.beforeEach((to, from, next) => {
    // 1. 获取token
    // const token = localStorage.getItem('zl-msm-token')
    const token = store.state.user.token

    if (!token) { // 1.1 如果没有token,跳转到登录页 /login
        if (to.path != '/login') {
            next({ path: '/login' })
        } else { // 请求登录页面 /login
            next()
        }
    } else { // 1.2 获取到token
        // 1.2.1 请求路由/login,就是目标路由
        if (to.path === '/login') {
            next()
        } else {  // 1.2.2 请求的路由非登录页,现在本地查看是否有用户信息
            // const userInfo = localStorage.getItem('zl-msm-user')
            const userInfo = store.state.user.user
            if (userInfo) {  // 本地获取到,则直接让他去目标路由
                next()
            } else {  // 如果本地没有用户信息,通过token获取用户信息,如果有,则进行非登录页面,如果没有,回到登录页
                store.dispatch("GetUserInfo").then(response => {
                    if (response.flag) {
                        next()
                    } else {
                        next({ path: "/login" })
                    }
                }).catch(error => { })
            }
        }
    }
})